CSS Custom Highlight APIã§é«åºŠãªããã¹ãéžæã¹ã¿ã€ãªã³ã°ãå®çŸãéžæäœéšãã«ã¹ã¿ãã€ãºãããŠãŒã¶ãŒãšã³ã²ãŒãžã¡ã³ããé«ããæ¹æ³ã解説ããŸãã
CSS Custom Highlight API: ããã¹ãéžæã®ã¹ã¿ã€ãªã³ã°ã極ãã
ãŠã§ãããŒãžäžã®ããã¹ããéžæãããšããæ§ãããªè¡çºã¯ãã»ãšãã©ã®ãŠãŒã¶ãŒãäœæ°ãªãè¡ã£ãŠããŸããããããéçºè ãšããŠç§ãã¡ã¯ãæãäºçްãªã€ã³ã¿ã©ã¯ã·ã§ã³ã§ããã匷åããããšãç®æããŸããCSS Custom Highlight APIã¯ãããã¹ãéžæã®äœéšã«é©åœããããããéžæãããããã¹ãã®è¡šç€ºæ¹æ³ãåäŸã®ãªãã¬ãã«ã§å¶åŸ¡ããåãäžããŠãããŸãããã®æ©èœã¯ãåãªãèæ¯è²ãæåè²ã®å€æŽã«ãšã©ãŸãããè€éã§é åçãªãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãå¯èœã«ããŸãã
CSS Custom Highlight APIãšã¯äœãïŒ
CSS Custom Highlight APIã¯ãCSSã䜿çšããŠããã¹ãéžæïŒããã³ãã®ä»ã®ãã€ã©ã€ãç¯å²ïŒã®å€èгãã¹ã¿ã€ãªã³ã°ããæ¹æ³ãæäŸããææ°ã®Webæšæºã§ããããã¯ãéçºè
ãå®çŸ©ããåºæºã«åºã¥ããŠç¹å®ã®ããã¹ãç¯å²ãã¿ãŒã²ããã«ãã::highlight()
æ¬äŒŒèŠçŽ ãå°å
¥ããŸãããã®APIã¯ãéåžžã«åºæ¬çãªã¹ã¿ã€ãªã³ã°ãªãã·ã§ã³ããæäŸããªãåŸæ¥ã®::selection
æ¬äŒŒèŠçŽ ã®å¶éãå
æããŸããCustom Highlight APIã䜿çšãããšãé«åºŠã«ã«ã¹ã¿ãã€ãºãããã³ã³ããã¹ãã«å¿ããããã¹ãéžæã¹ã¿ã€ã«ãäœæã§ããŸãã
ãªãCSS Custom Highlight APIã䜿çšããã®ãïŒ
Custom Highlight APIã¯ãããã¹ãéžæãã¹ã¿ã€ãªã³ã°ããåŸæ¥ã®æ¹æ³ã«æ¯ã¹ãŠãããã€ãã®å©ç¹ãæäŸããŸãïŒ
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åäžïŒãŠãŒã¶ãŒãå°ããå¯èªæ§ãåäžããããèŠèŠçã«é åçã§æ å ±éã®å€ãããã¹ãéžæãäœæããŸãã
- ã³ã³ããã¹ãã«å¿ããã¹ã¿ã€ãªã³ã°ïŒã³ãŒãã¹ããããã®ãã€ã©ã€ããéèŠçšèªã®åŒ·èª¿ãªã©ãéžæãããããã¹ãã®å 容ã«åºã¥ããŠç°ãªãã¹ã¿ã€ã«ãé©çšããŸãã
- ã¢ã¯ã»ã·ããªãã£ã®åäžïŒéžæãããããã¹ãã«æç¢ºãªèŠèŠçåå³ãæäŸããèŠèŠé害ã®ãããŠãŒã¶ãŒãã³ã³ãã³ããããã²ãŒãããããããŸãã
- ã«ã¹ã¿ãã€ãºå¯èœãªå€èгïŒåºæ¬çãªèæ¯è²ãæåè²ã®å€æŽã«ãšã©ãŸããããŠããŒã¯ã§é åçãªããã¹ãéžæã¹ã¿ã€ã«ãäœæããŸãã
- åçãªã¹ã¿ã€ãªã³ã°ïŒãŠãŒã¶ãŒã®ã€ã³ã¿ã©ã¯ã·ã§ã³ãã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ã«åºã¥ããŠãããã¹ãéžæã®å€èгã倿ŽããŸãã
äž»èŠãªæŠå¿µã®çè§£
ã³ãŒãäŸã«é²ãåã«ãCSS Custom Highlight APIã®æ žãšãªãæŠå¿µãçè§£ããããšãäžå¯æ¬ ã§ãïŒ
1. ãã€ã©ã€ãã®ç»é²
ããã»ã¹ã¯ãJavaScriptã䜿çšããŠã«ã¹ã¿ã ãã€ã©ã€ãåãç»é²ããããšããå§ãŸããŸãããã®ååã¯ãCSSã§ç¹å®ã®ããã¹ãéžæãã¿ãŒã²ããã«ããããã«äœ¿çšãããŸãã
2. ãã€ã©ã€ãç¯å²
ãã€ã©ã€ãç¯å²ã¯ãã¹ã¿ã€ãªã³ã°ãããç¹å®ã®ããã¹ãã¹ãã³ãå®çŸ©ããŸãããããã®ç¯å²ã¯ãHighlight
ããã³StaticRange
ãŸãã¯Range
APIã䜿çšããŠããã°ã©ã ã§äœæãããŸãããã€ã©ã€ãããããã¹ãã®éå§ç¹ãšçµäºç¹ãæå®ããŸãã
3. ::highlight()
æ¬äŒŒèŠçŽ
ãã®æ¬äŒŒèŠçŽ ã¯ãç»é²ããããã€ã©ã€ãåã«ã¹ã¿ã€ã«ãé©çšããããã«CSSã§äœ¿çšãããŸããããã¯ã»ã¬ã¯ã¿ãšããŠæ©èœãããã€ã©ã€ãç¯å²ã«ãã£ãŠå®çŸ©ãããããã¹ãã¹ãã³ãã¿ãŒã²ããã«ããŸãã
å®è·µäŸïŒCSS Custom Highlight APIã®å®è£
CSS Custom Highlight APIã®äœ¿ç𿹿³ã説æããããã«ãããã€ãã®å®è·µçãªäŸãèŠãŠãããŸãããã
äŸ1ïŒåºæ¬çãªããã¹ãéžæã¹ã¿ã€ãªã³ã°
ãã®äŸã§ã¯ãéžæãããããã¹ãã®èæ¯è²ãšæåè²ã倿Žããæ¹æ³ã瀺ããŸãã
HTML:
<p id="myText">This is some text that can be selected.</p>
JavaScript:
const myText = document.getElementById('myText');
const highlight = new Highlight();
// Select the entire paragraph.
highlight.add(new Range(myText.firstChild, 0, myText.firstChild, myText.firstChild.length));
CSS.highlights.set('myHighlight', highlight);
CSS:
::highlight(myHighlight) {
background-color: #ff0;
color: #000;
}
解説ïŒ
- JavaScriptã³ãŒãã¯
Highlight
ãªããžã§ã¯ããäœæããIDãmyText
ã®æ®µèœå šäœãã«ããŒããç¯å²ã远å ããŸãã CSS.highlights.set()
ã¡ãœããã¯ããmyHighlightããšããååã§ãã€ã©ã€ããç»é²ããŸãã- CSSã³ãŒãã¯
::highlight(myHighlight)
æ¬äŒŒèŠçŽ ã䜿çšããŠãéžæãããããã¹ããé»è²ã®èæ¯ãšé»ã®æåè²ã§ã¹ã¿ã€ãªã³ã°ããŸãã
äŸ2ïŒç¹å®ã®åèªã®ãã€ã©ã€ã
ãã®äŸã§ã¯ã段èœå ã®ç¹å®ã®åèªããã€ã©ã€ãããæ¹æ³ã瀺ããŸãã
HTML:
<p id="myText">This is a paragraph with the word highlight that we want to highlight.</p>
JavaScript:
const myText = document.getElementById('myText');
const highlight = new Highlight();
const textContent = myText.textContent;
const wordsToHighlight = ['highlight'];
wordsToHighlight.forEach(word => {
let index = textContent.indexOf(word);
while (index !== -1) {
highlight.add(new Range(myText.firstChild, index, myText.firstChild, index + word.length));
index = textContent.indexOf(word, index + 1);
}
});
CSS.highlights.set('keywordHighlight', highlight);
CSS:
::highlight(keywordHighlight) {
background-color: lightgreen;
font-weight: bold;
}
解説ïŒ
- JavaScriptã³ãŒãã¯æ®µèœå ã®åèªãå埩åŠçãããhighlightããšããåèªã®ã€ã³ããã¯ã¹ãç¹å®ããŸãã
- åºçŸãããã³ã«ã
Range
ãªããžã§ã¯ããäœæãããããHighlight
ãªããžã§ã¯ãã«è¿œå ããŸãã - CSSã³ãŒãã¯ããã€ã©ã€ããããåèªãèç·è²ã®èæ¯ãšå€ªåã®ãã©ã³ããŠã§ã€ãã§ã¹ã¿ã€ãªã³ã°ããŸãã
äŸ3ïŒãŠãŒã¶ãŒå ¥åã«åºã¥ãåçãªãã€ã©ã€ã
ãã®äŸã§ã¯ãæ€çŽ¢ããã¯ã¹ãžã®ãŠãŒã¶ãŒå ¥åã«åºã¥ããŠããã¹ããåçã«ãã€ã©ã€ãããæ¹æ³ã瀺ããŸãã
HTML:
<input type="text" id="searchInput" placeholder="Enter text to highlight">
<p id="myText">This is some text that will be dynamically highlighted based on user input.</p>
JavaScript:
const searchInput = document.getElementById('searchInput');
const myText = document.getElementById('myText');
const highlight = new Highlight();
searchInput.addEventListener('input', () => {
const searchTerm = searchInput.value;
highlight.clear(); // Clear previous highlights
if (searchTerm) {
const textContent = myText.textContent;
let index = textContent.indexOf(searchTerm);
while (index !== -1) {
highlight.add(new Range(myText.firstChild, index, myText.firstChild, index + searchTerm.length));
index = textContent.indexOf(searchTerm, index + 1);
}
}
CSS.highlights.set('searchHighlight', highlight);
});
CSS:
::highlight(searchHighlight) {
background-color: yellow;
color: black;
}
解説ïŒ
- JavaScriptã³ãŒãã¯ãæ€çŽ¢ããã¯ã¹ã®å ¥å倿Žããªãã¹ã³ããŸãã
- æ¢åã®ãã€ã©ã€ããã¯ãªã¢ããå ¥åãããããã¹ããæ®µèœå ã§æ€çŽ¢ããŸãã
- åºçŸãããã³ã«ã
Range
ãªããžã§ã¯ããäœæãããããHighlight
ãªããžã§ã¯ãã«è¿œå ããŸãã - CSSã³ãŒãã¯ãåçã«ãã€ã©ã€ããããããã¹ããé»è²ã®èæ¯ãšé»ã®æåè²ã§ã¹ã¿ã€ãªã³ã°ããŸãã
äŸ4ïŒ::highlight()
ã«ãããã€ã©ã€ãã®å€èгã®ã«ã¹ã¿ãã€ãº
Custom Highlight APIã®åã¯ããã€ã©ã€ããããããã¹ãã®ã«ãã¯ã¢ã³ããã£ãŒã«ãã«ã¹ã¿ãã€ãºã§ããèœåã«ãããŸãã圱ãã°ã©ããŒã·ã§ã³ããã®ä»ã®èŠèŠå¹æãé©çšããæ¹æ³ã以äžã«ç€ºããŸãã
HTML:
<p id="customText">Select this text to see a custom highlight effect.</p>
JavaScript:
const customText = document.getElementById('customText');
const highlight = new Highlight();
highlight.add(new Range(customText.firstChild, 0, customText.firstChild, customText.firstChild.length));
CSS.highlights.set('fancyHighlight', highlight);
CSS:
::highlight(fancyHighlight) {
background: linear-gradient(to right, #4CAF50, #8BC34A);
color: white;
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5);
border-radius: 5px;
padding: 2px 5px;
}
解説ïŒ
- ãã®äŸã§ã¯ãç·åœ¢ã°ã©ããŒã·ã§ã³ã®èæ¯ãçœãããã¹ããããã¹ãã·ã£ããŠãè§äžžãããã£ã³ã°ããã€ã©ã€ããããããã¹ãã«é©çšããŸãã
- ããã¯ã
::highlight()
æ¬äŒŒèŠçŽ å ã§æšæºçãªCSSããããã£ã䜿çšããŠãèŠèŠçã«é åçã§ãŠããŒã¯ãªéžæã¹ã¿ã€ã«ãå®çŸããæ¹æ³ã瀺ããŠããŸãã
ã¢ã¯ã»ã·ããªãã£ã«é¢ããèæ ®äºé
ããã¹ãéžæã®èŠèŠçãªå€èгãåäžãããããšã¯éèŠã§ãããã¢ã¯ã»ã·ããªãã£ã¯åžžã«æåªå äºé ã§ããã¹ãã§ããã«ã¹ã¿ã ãã€ã©ã€ãã¹ã¿ã€ã«ãã¢ã¯ã»ã·ãã«ã§ããããšãä¿èšŒããããã®ã¬ã€ãã©ã€ã³ãããã€ã玹ä»ããŸãïŒ
- è²ã®ã³ã³ãã©ã¹ãïŒãã€ã©ã€ããããããã¹ãã®èæ¯è²ãšæåè²ã®éã«ååãªã³ã³ãã©ã¹ãã確ä¿ããŠãã ãããWebAIM Contrast Checkerãªã©ã®ããŒã«ã䜿çšããŠãã¢ã¯ã»ã·ããªãã£åºæºïŒWCAGïŒãžã®æºæ ã確èªããŸãã
- èŠèŠçãªåå³ïŒéžæãããããã¹ãã«æç¢ºãªèŠèŠçåå³ãæäŸããŠãã ãããèŠèŠé害ã®ãããŠãŒã¶ãŒãç¥èŠãã«ãã埮åŠãªè²ã®å€æŽã¯é¿ããŠãã ããã
- ããŒããŒãããã²ãŒã·ã§ã³ïŒã«ã¹ã¿ã ãã€ã©ã€ãã¹ã¿ã€ã«ãããŒããŒãããã²ãŒã·ã§ã³ã劚ããªãããã«ããŠãã ããããŠãŒã¶ãŒã¯ããŒããŒãã䜿çšããŠããã¹ããç°¡åã«éžæããã³ããã²ãŒãã§ããå¿ èŠããããŸãã
- ã¹ã¯ãªãŒã³ãªãŒããŒã®äºææ§ïŒã«ã¹ã¿ã ãã€ã©ã€ãã¹ã¿ã€ã«ãã¹ã¯ãªãŒã³ãªãŒããŒã§ãã¹ãããéžæãããããã¹ããé©åã«èªã¿äžããããããšã確èªããŠãã ããã
ãã©ãŠã¶ã®äºææ§
CSS Custom Highlight APIã¯æ¯èŒçæ°ããWebæšæºã§ããããã©ãŠã¶ã®äºææ§ã¯ç°ãªãå ŽåããããŸãã2023幎åŸåãã2024幎åé ã®æç¹ã§ããµããŒãã¯æ¡å€§ããŠããŸããããŸã æ®éçã«å®è£ ãããŠã¯ããŸããããCan I use...ãã®ãããªãŠã§ããµã€ãã§çŸåšã®ãã©ãŠã¶ãµããŒãç¶æ³ã確èªããäºææ§ã®æŽæ°æ å ±ãå ¥æã§ããŸãã
APIããŸã ãµããŒãããŠããªããã©ãŠã¶ã®ããã«ãæ©èœæ€åºã䜿çšããŠãã©ãŒã«ããã¯ã¹ã¿ã€ã«ãæäŸããããšãæ€èšããŠãã ããã
if ('CSS' in window && 'highlights' in CSS) {
// Use the Custom Highlight API
} else {
// Provide fallback styles using ::selection
}
å®éã®ãŠãŒã¹ã±ãŒã¹
CSS Custom Highlight APIã«ã¯ã以äžãå«ãæ°å€ãã®å®éã®å¿çšäŸããããŸãïŒ
- ã³ãŒããšãã£ã¿ïŒã³ãŒããšãã£ã¿å ã§æ§æèŠçŽ ããšã©ãŒãèŠåããã€ã©ã€ãããŸãã
- Eã©ãŒãã³ã°ãã©ãããã©ãŒã ïŒææã®äž»èŠãªæŠå¿µãå®çŸ©ã匷調ããŸãã
- ããã¥ã¡ã³ããã¥ãŒã¢ïŒãŠãŒã¶ãŒãããã¥ã¡ã³ãå ã®ããã¹ãããã€ã©ã€ãããããæ³šéãä»ãããã§ããããã«ããŸãã
- æ€çŽ¢çµæïŒæ€çŽ¢çµæå ã®æ€çŽ¢èªããã€ã©ã€ãããŸãã
- ããŒã¿å¯èŠåïŒãã£ãŒããã°ã©ãå ã®ç¹å®ã®ããŒã¿ãã€ã³ãããã¬ã³ãããã€ã©ã€ãããŸãã
ãã¹ããã©ã¯ãã£ã¹ãšãã³ã
- 説æçãªãã€ã©ã€ãåã䜿çšããïŒãã€ã©ã€ãã®ç®çãæç¢ºã«ç€ºããã€ã©ã€ãåãéžæããŸãã
- å¿ èŠãªãšãã«ãã€ã©ã€ããã¯ãªã¢ããïŒäºæããªãã¹ã¿ã€ãªã³ã°ã®åé¡ãé¿ãããããäžèŠã«ãªã£ããã€ã©ã€ãã¯ã¯ãªã¢ããããšãå¿ããªãã§ãã ããã
- ããã©ãŒãã³ã¹ãæé©åããïŒããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããããéå°ãªãã€ã©ã€ãç¯å²ã®äœæã¯é¿ããŠãã ããã
- 培åºçã«ãã¹ãããïŒäºææ§ãšã¢ã¯ã»ã·ããªãã£ã確ä¿ãããããç°ãªããã©ãŠã¶ãããã€ã¹ã§ã«ã¹ã¿ã ãã€ã©ã€ãã¹ã¿ã€ã«ããã¹ãããŠãã ããã
- ãã©ãŒã«ããã¯ãæ€èšããïŒCustom Highlight APIããŸã ãµããŒãããŠããªããã©ãŠã¶ã®ããã«ããã©ãŒã«ããã¯ã¹ã¿ã€ã«ãæäŸããŸãã
é«åºŠãªãã¯ããã¯
1. è€æ°ã®ãã€ã©ã€ãã®çµã¿åãã
è€æ°ã®ãã€ã©ã€ããçµã¿åãããŠãããè€éãªã¹ã¿ã€ãªã³ã°å¹æãäœæã§ããŸããäŸãã°ãããŒã¯ãŒããšãŠãŒã¶ãŒãéžæããããã¹ãã®äž¡æ¹ãç°ãªãã¹ã¿ã€ã«ã§ãã€ã©ã€ããããå Žåãªã©ã§ãã
2. ã€ãã³ãã䜿çšãããã€ã©ã€ãã®æŽæ°
mouseoverãclickãªã©ã®JavaScriptã€ãã³ãã䜿çšããŠããŠãŒã¶ãŒã®ã€ã³ã¿ã©ã¯ã·ã§ã³ã«åºã¥ããŠãã€ã©ã€ãç¯å²ãåçã«æŽæ°ã§ããŸãã
3. ãµãŒãããŒãã£ã©ã€ãã©ãªãšã®çµ±å
Custom Highlight APIããµãŒãããŒãã£ã©ã€ãã©ãªãšçµ±åããŠãããæŽç·Žããããã€ã©ã€ããœãªã¥ãŒã·ã§ã³ãäœæã§ããŸããäŸãã°ãèªç¶èšèªåŠçïŒNLPïŒã©ã€ãã©ãªã䜿çšããŠãããã¥ã¡ã³ãå ã®äž»èŠãªçšèªãèªåçã«èå¥ããŠãã€ã©ã€ãããããšãã§ããŸãã
ããã¹ãéžæã¹ã¿ã€ãªã³ã°ã®æªæ¥
CSS Custom Highlight APIã¯ãããã¹ãéžæã¹ã¿ã€ãªã³ã°ã«ãããéèŠãªé²æ©ã衚ããŠããŸããããã«ãããéçºè ã¯ããé åçã§ãã¢ã¯ã»ã·ãã«ã§ãã³ã³ããã¹ãã«å¿ãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãäœæã§ããŸãããã©ãŠã¶ã®ãµããŒããæ¡å€§ãç¶ããã«ã€ããŠãCustom Highlight APIã¯äžçäžã®Webéçºè ã«ãšã£ãŠäžå¯æ¬ ãªããŒã«ã«ãªãæºåãã§ããŠããŸãã
çµè«
CSS Custom Highlight APIã¯ãããã¹ãéžæäœéšãã«ã¹ã¿ãã€ãºããããã®å¯èœæ§ã®äžçãè§£ãæŸã¡ãŸããäž»èŠãªæŠå¿µãçè§£ããå®è·µçãªäŸãæ¢æ±ããã¢ã¯ã»ã·ããªãã£ã®ã¬ã€ãã©ã€ã³ãèæ ®ããããšã§ããã®åŒ·åãªAPIãæŽ»çšããŠçã«åªãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãäœæã§ããŸããCustom Highlight APIãåãå ¥ããWebéçºãããžã§ã¯ããæ°ããªé«ã¿ãžãšåŒãäžããŸãããã
æäŸãããŠããäŸã詊ããç¹å®ã®ããŒãºã«åãããŠèª¿æŽããCSS Custom Highlight APIã®å šæœåšèœåãæ¢æ±ããŠãã ããããŠãŒã¶ãŒã¯çްéšãžã®é æ ®ãšåäžãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«æè¬ããã§ãããã